'use strict'
process.chdir(__dirname);
const titbit=require('titbit')
const fs= require('fs')
const pg=require('pg')
const dbconfig=require('./dbconfig')
//使用HTTP/1.1的页面
const {httpcli}=require('gohttp');
const wxkey = require('./wxkey.js');
const token=require('titbit-token');
const tbloader=require('titbit-loader');
const { toUSVString } = require('util');
let tok=new token({
    //token有效期，单位是秒
    expires:30,
    //必须是32位数子字母
    key:'qwertyuiopasdfghjklzxcvbnm123456',
    //必须是16位数字字母
    iv:'1234567890qwerty'
})

//初始化数据库链接
let  psql=new pg.Pool(dbconfig)
try{
    fs.accessSync('./images')
} catch(err){
    fs.mkdirSync('./images')
}
let cert_path='/usr/local/share'
const app=new titbit({
    //开启调试模式，会输出错误信息
    debug:true,
    globallog:true,
    cert:`${cert_path}/aaa.coralmh.xyz.pem`,
    key:`${cert_path}/aaa.coralmh.xyz.key`
})
let tb=new tbloader();
tb.init(app);
//就是在app.service对象上添加了一个属性
app.addService('tok',tok);
app.addService('psql',psql);
app.addService('imagePath',`${__dirname}/images`)
//c 就是context
app.get('/',async c=>{
    c.send('ok')
})
app.get('/upload',async c=>{
    //c.helper是助手函数模块，其中有对stream.pipe的封装
    //c.reply是响应对象，http/1.1中指向response,http/2中指向stream。
await c.helper.pipe('./upload.html',c.reply)
})
//js无需加分号，谁用谁知道
//有时也得加分号，括号开头很需要
//:开头表示这个路由是带参数的路由
app.get('/mp-login/:code',async c=>{
    let auth_url=`https://api.weixin.qq.com/sns/jscode2session`
                 +`?appid=${wxkey.appid}`
                 +`&secret=${wxkey.secret}`
                 +`&js_code=${c.param.code}`
                 +`&grant_type=authorization_code`

    let ret=await httpcli.get(auth_url)
        .then(res=>
            res.json()
             )
    c.send(tok.make(ret))
                         
})
app.run(2001)